package com.hospital.util;

import com.alibaba.druid.pool.DruidDataSource;
import org.slf4j.Logger;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException;

/**
 * Druid数据库连接池工具类
 * 提供数据库连接的获取和管理功能
 */
public class DruidUtil {
    /** 日志记录器 */
    private static final Logger logger = LoggerUtil.getLogger();
    /** 数据库连接池对象 */
    private static DruidDataSource dataSource;
    
    static {
        initDataSource();
    }

    /**
     * 初始化数据库连接池
     */
    private static void initDataSource() {
        dataSource = new DruidDataSource();
        // 设置数据库连接参数
        dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
        dataSource.setUrl("jdbc:mysql://localhost:3306/hospital_new");
        dataSource.setUsername("root");
        dataSource.setPassword("zhang0505");
        
        // 配置初始化大小、最小、最大
        dataSource.setInitialSize(5);
        dataSource.setMinIdle(5);
        dataSource.setMaxActive(20);
        
        // 配置获取连接等待超时的时间
        dataSource.setMaxWait(60000);
        
        // 配置间隔多久才进行一次检测，检测需要关闭的空闲连接
        dataSource.setTimeBetweenEvictionRunsMillis(60000);
        dataSource.setMinEvictableIdleTimeMillis(300000);
        dataSource.setTestWhileIdle(true);
        dataSource.setTestOnBorrow(false);
        dataSource.setTestOnReturn(false);
        dataSource.setPoolPreparedStatements(true);
        dataSource.setMaxPoolPreparedStatementPerConnectionSize(20);
    }

    /**
     * 获取数据库连接
     * @return 数据库连接对象
     * @throws SQLException 获取连接失败时抛出异常
     */
    public static Connection getConnection() throws SQLException {
        try {
            return dataSource.getConnection();
        } catch (SQLException e) {
            logger.error("获取数据库连接失败", e);
            throw e;
        }
    }

} 